//
//  IFAACommon.h
//  esand_ios_demo
//
//  Created by ReidLee on 2018/2/23.
//  Copyright © 2018年 esandinfo. All rights reserved.
//

#define IFAA_TRANSPORT_ENCRYPT_KEY @"ifaa.transport.encrypt.key"
#define IFAA_TRANSPORT_SIGNATURE_KEY @"ifaa.transport.signature.key"
#define IFAA_DEVICE_SIGNATURE_KEY @"ifaa.device.signature.key"
#define IFAA_DEVICE_HW_KEY @"ifaa.device.hw.key"
#define IFAA_DEVICE_STORE_KEY @"ifaa.device.store.key"

#define IFAA_SERVER_ALI_URL @"https://hiddenapis.market.alicloudapi.com";

#ifndef IFAACommon_h
#define IFAACommon_h

typedef NSString *IFAAErrorCode;

/**
 * 本地成功
 */
static IFAAErrorCode const IFAA_SUCCESS = @"0";
/**
 * 终端不支持 IFAA
 */
static IFAAErrorCode const IFAA_STATUS_NOT_SUPPORT = @"1";
/**
 * 终端支持IFAA的指纹服务（Touch ID）
 */
static IFAAErrorCode const IFAA_STATUS_FINGERPRINT = @"2";
/**
 * 终端支持IFAA的人脸服务（Face ID）
 */
static IFAAErrorCode const IFAA_STATUS_FACE_ID = @"3";
/**
 * 终端没有录入指纹/人脸
 */
static IFAAErrorCode const IFAA_STATUS_NOT_ENROLLED = @"4";
/**
 * 指纹/人脸尚未注册
 */
static IFAAErrorCode const IFAA_STATUS_NOT_REGISTERED = @"5";
/**
 * IFAA 已经注册 (这只是一个状态，并不是错误)
 */
static IFAAErrorCode const IFAA_STATUS_REGISTERED = @"6";
/**
 * 尚未设置屏幕锁密码 （IFAA 需要设置屏幕锁后才能进行，否则不安全，此处可引导用户去设置屏幕锁）
 */
static IFAAErrorCode const IFAA_STATUS_PASSCODE_NOT_SET = @"7";
/**
 * 本地代码异常
 */
static IFAAErrorCode const IFAA_CLIENT_ERROR = @"8";
/**
 * IFAA 服务器错误
 */
static IFAAErrorCode const IFAA_SERVER_ERROR = @"9";
/**
 * 本地指纹已经注册，但是注册的指纹模组数据已经被删除
 * 此手机不支持多指位，并且注册的那个指位已经被删除，需要注销后在注册方能使用(Android 独有)
 */
static IFAAErrorCode const IFAA_STATUS_DELETED = @"10";
/**
 * 此手机不支持多指位(Android 独有)
 */
static IFAAErrorCode const IFAA_CLIENT_ERROR_MULTI_FP_NOT_SUPPORT = @"11";
/**
 * 用户取消
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_CANCELED = @"12";
/**
 * 超时(Android 独有)
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_TIMEOUT = @"13";
/**
 * 验证失败，系统指纹/人脸不匹配
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_AUTH_FAIL = @"14";
/**
 * 连续多次校验失败，指纹校验被暂时锁定(Android 独有)
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_SYSTEM_BLOCK = @"15";
/**
 * 点击了 FALLBACK 按钮
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_FALLBACK = @"16";
/**
 * TEE 错误
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_TEE_ERROR = @"17";
/**
 * 手机系统问题，请升级系统版本(Android 独有)
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_SYSTEM_ERROR = @"18";
/**
 * -Android:当前设备未获取相机权限
 * -IOS:当前应用未获取Face ID权限
 */
static IFAAErrorCode const IFAA_PERMISSION_DENIED = @"19";
/**
 * 网络异常
 */
static IFAAErrorCode const IFAA_NETWORK_ERROR = @"20";
/**
 * 指位/人脸不匹配，需要更新指位/人脸
 */
static IFAAErrorCode const IFAA_WRONG_AUTHDATAINDEX = @"21";
/**
 * 下发短信
 */
static IFAAErrorCode const IFAA_SEND_SMS = @"22";

/**
 * 本地成功（注册）
 */
static IFAAErrorCode const  IFAA_SUCCESS_REG = @"23";

/**
 * TEE 错误 ANDROID
 */
static IFAAErrorCode const IFAA_STATUS_RESULT_TEE_ERROR_WRITE = @"24";
/**
 * 当前不可用
 */
static IFAAErrorCode const IFAA_NOT_AVAILABLE = @"25";

// IFAA 的处理流程
typedef enum IFAAProcess
{
    /**
     * 注册请求流程
     */
    REG_GETREQ,
    /**
     * 注册响应流程
     */
    REG_SENDRESP,
    /**
     * 认证请求流程
     */
    AUTH_GETREQ,
    /**
     * 认证响应流程
     */
    AUTH_SENDRESP,
    /**
     * 更新指位响流程
     */
    MUITLFINGERS_AUTH_SENDRESP,
    /**
     * 注销请求流程
     */
    DEREG_REQ,
    /**
     * 检查服务器注册状态请求流程
     */
    CHECK_REG_STATUS,
} IFAAProcess;

typedef enum IfaaBioResult
{
    /// 成功
    CLIENT_RESULT_SUCCESS = 100,
    /// 用户点击了'cancel'
    CLIENT_RESULT_USER_CANCEL = 101,
    /// 系统版本低于iOS8
    CLIENT_RESULT_NOT_SUPPORT = 102,
    /// 被其他进程抢占，如来电
    CLIENT_RESULT_SYSTEM_CANCEL = 103,
    /// passcode未设置
    CLIENT_RESULT_PASSCODE_NOTSET = 104,
    /// 指纹不匹配
    CLIENT_RESULT_NO_MATCH = 105,
    /// 用户点击了'Enter Passcode'
    CLIENT_RESULT_FALLBACK = 106,
    /// 未录入指纹
    CLIENT_RESULT_NOT_ENROLLED = 107,
    /// 不可用
    CLIENT_RESULT_NOT_AVAILABLE = 108,
    ///系统指纹异常
    CLIENT_RESULT_TOUCHID_ERROR = 109,
    //    ///该机器越狱
    //    public static let CLIENT_RESULT_JAILBREAK  = 110
    /// 参数不对
    CLIENT_RESULT_WRONG_PARAM = 111,
    /// 校验错误包含其中
    CLIENT_RESULT_UNKNOWN = 112,
} IfaaBioResult;

/**
 * IFAA 支持的认证类型枚举
 */
typedef enum IfaaAuthType
{
    /// 指纹 (ios 8.0 开始支持)
    AUTHTYPE_FINGERPRINT = 1,
    /// 人脸 (iphone x以及之后的机型)
    AUTHTYPE_FACEID = 1 << 2,
} IfaaAuthType;

typedef enum IFAAProcessAction
{
    /**
     * SimpleIFAA模式
     */
    IFAA_SIMPLE,
    /**
     * 号码认证SDK
     */
    IFAA_MNO_SDK,
    /**
     * IFAA加短信认证
     */
    IFAA_SMS,
    /**
     * 电信MNO
     */
    IFAA_MNO
} IFAAProcessAction;

typedef enum SMSStrategy
{
    DEFAULT = 0,
    // 只做SMS认证
    SMS_ONLY,
    // 只做IFAA认证，APP端需要考虑不支持IFAA的情况
    IFAA_ONLY,
    // 做短信验证码验证后再做IFAA认证
    SMS_AND_IFAA
} SMSStrategy;
#endif /* IFAACommon_h */
